Duchen's Blog

《Clean Code》读书笔记

  1. 命名

    • 不要使用自定义的编码规则(类似 txt,img 这样的前缀)
    • 命名应可以直接读出来
    • 去除无意义的部分(类似 manager,process 这种),清晰表达一个概念或动作
    • 类名应使用名词
    • 使用描述了参数的静态工厂方法名来重载构造器

      1
      2
      3
      Complex fulcrumPoint = Complex.FromRealNumber(23);
      好于
      Complex fulcrumPoint = new Complex(23);
    • 不要使用意义相近的词描述不同的概念(命名应该保持一种规范)

  2. 函数

    • 函数应该尽量短小,只用来做一件事
    • 尽量避免switch语句,采用多态的设计来替代
    • 传入不超过两个的参数(其他参数可以想办法提取为类成员变量)
    • 错误处理应该独占一个函数
    • 消除不同函数中重复的代码(通过提取公共函数)
  3. 注释

    • 好的代码不应该有注释(通过命名来解释逻辑)
    • 注释可以用来描述看似不合理之物的重要性
    • 不要注释不在使用的代码,直接删掉!
  4. 格式

    • 统一的格式,缩进,代码行最大长度等
    • 源文件最顶部应该给出高层次的概念和逻辑,细节往下逐渐展开
  5. 对象和数据结构

    • 隐藏内部结构(实现细节)
    • 对象的方法应该被用来执行某个动作,得到结果,而不是暴露内部数据
  6. 错误处理

    • 不要返回、传递null值(这只会加大别人的调用成本)
  7. 边界

    • 为不能控制的库代码提供封装,保证边界可控
  8. 测试

    • 测试代码应在生产代码之前编写
    • 快速、独立、可重复、自足验证、及时
    • 一个类只应该有一个权责
    • 类应该在保持短小的基础上做到高内聚(方法和全局变量联系紧密)
    • 将多个函数共同需要的参数提升为类的变量(维持函数参数的数量),然后在发现类失去了内聚性的时候将类拆分